package com.hk.jmm.utils;

import android.content.Context;
import android.content.res.Resources;
import android.util.TypedValue;

/**
 * TODO 常用单位转换的辅助类
 *
 * @author CPC
 * 1、dp转px
 * 2、sp转px
 * 3、px转dp
 * 4、px转sp
 */
public class DensityUtils {
    private DensityUtils() {
        /* cannot be instantiated */
        throw new UnsupportedOperationException("cannot be instantiated");
    }

    /**
     * dp转px
     *
     * @param context
     * @return
     */
    public static int dp2px(Context context, float dpVal) {
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, dpVal,
                context.getResources().getDisplayMetrics());
    }

    /**
     * 根据手机的分辨率从 dip 的单位 转成为 px(像素)
     */
    public static int dip2px(Context context, float dpValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }

    /**
     * 根据手机的分辨率从 px(像素) 的单位 转成为 dp
     */
    public static int px2dip(Context context, float pxValue) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }

    /**
     * Value of sp to value of px.
     *
     * @param spValue The value of sp.
     * @return value of px
     */
    public static int spToPx(float spValue) {
        float fontScale = Resources.getSystem().getDisplayMetrics().scaledDensity;
        return (int) (spValue * fontScale + 0.5f);
    }

    /**
     * sp转px
     *
     * @param context
     * @return
     */
    public static int sp2px(Context context, float spVal) {
        return (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, spVal,
                context.getResources().getDisplayMetrics());
    }

    /**
     * px转dp
     *
     * @param context
     * @param pxVal
     * @return
     */
    public static float px2dp(Context context, float pxVal) {
        final float scale = context.getResources().getDisplayMetrics().density;
        return (pxVal / scale);
    }

    /**
     * px转sp
     *
     * @param pxVal
     * @return
     */
    public static float px2sp(Context context, float pxVal) {
        return (pxVal / context.getResources().getDisplayMetrics().scaledDensity);
    }


    /**
     * 版本对比(是否需要更新版本)
     *
     * @param newVersion   服务器上获取的版本
     * @param indexVersion 当前使用的版本
     * @return true：服务器上是最新版本，需要更新； false：不需要更新
     */

    public static boolean isUpdateForVersion(String newVersion, String indexVersion) {
        if ("".equals(newVersion) || null == newVersion
                || "null".equals(newVersion)) {
            return false;
        } else {
            String[] newNums = newVersion.split("\\.");
            String[] indexNums = indexVersion.split("\\.");
            if (newNums.length > indexNums.length) {// 比较的次数为长度最小
                for (int i = 0; i < indexNums.length; i++) {// 服务器上版本数大于 当前的，就是最新版，要更新
                    if (Integer.parseInt(newNums[i]) > Integer
                            .parseInt(indexNums[i])) {
                        return true;
                    } else if (Integer.parseInt(newNums[i]) < Integer
                            .parseInt(indexNums[i])) {
                        return false;
                    }
                }
                return true;
            } else if (newNums.length <= indexNums.length) {
                for (int i = 0; i < newNums.length; i++) {// 服务器上版本数大于 当前的，就是最新版，要更新
                    if (Integer.parseInt(newNums[i]) > Integer
                            .parseInt(indexNums[i])) {
                        return true;
                    } else if (Integer.parseInt(newNums[i]) < Integer
                            .parseInt(indexNums[i])) {
                        return false;
                    }
                }
                return false;
            }
        }
        return false;
    }


    public static void main(String[] args) {
        Boolean i = isUpdateForVersion("3.1", "2.1.1");
        System.out.println("i=" + i);
    }
}
